home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / SAT / myPlatform ƒ / sPlayerSprite.p < prev   
Encoding:
Text File  |  1993-09-19  |  2.7 KB  |  119 lines  |  [TEXT/PJMM]

  1. { Player sprite for the Platform test}
  2.  
  3. unit sPlayerSprite;
  4.  
  5. interface
  6.  
  7.     uses
  8.         SAT;
  9.  
  10.     var
  11.         rightFaces, leftFaces: array[0..3] of FacePtr;
  12.         fallFace: array[0..1] of FacePtr;
  13.  
  14.     procedure InitPlayerSprite;
  15.     procedure SetupPlayerSprite (me: SpritePtr);
  16.     procedure HandlePlayerSprite (me: SpritePtr);
  17.     procedure HitPlayerSprite (me, him: SpritePtr);
  18.  
  19. implementation
  20.  
  21.     procedure InitPlayerSprite;
  22.         var
  23.             i: integer;
  24.     begin
  25.         for i := 0 to 3 do
  26.             rightFaces[i] := GetFace(128 + i);
  27.         for i := 0 to 3 do
  28.             leftFaces[i] := GetFace(132 + i);
  29.         for i := 0 to 1 do
  30.             fallFace[i] := GetFace(136 + i);
  31.     end;
  32.  
  33.     procedure SetupPlayerSprite (me: SpritePtr);
  34.     begin
  35.         me^.mode := 0;
  36.         me^.speed.h := 1;
  37.         me^.kind := 1; {Friend kind}
  38.         SetRect(me^.hotRect, 8, 0, 24, 32);
  39.         me^.face := fallFace[0];
  40.     end;
  41.  
  42.     procedure HandlePlayerSprite (me: SpritePtr);
  43.         var
  44.             theEvent: EventRecord;
  45.     begin
  46.         if me^.kind = 10 then
  47.             begin
  48.                 me^.speed.h := me^.speed.h div 2;
  49.             end;
  50.  
  51.         if GetOSEvent(keyDownMask + autoKeyMask, theEvent) then
  52.             if me^.kind <> 1 then{Touching something - then we can control!}
  53.                 case char(bitand(theEvent.message, charCodeMask)) of
  54.                     ',': 
  55.                         me^.speed.h := -5;
  56.                     '.': 
  57.                         me^.speed.h := 5;
  58.                     ' ': 
  59.                         me^.speed.v := -10;
  60.                     otherwise
  61.                 end;
  62.  
  63.         me^.position.h := me^.position.h + me^.speed.h;
  64.         me^.position.v := me^.position.v + me^.speed.v;
  65.         if me^.kind < 3 then {acceleration when in midair!}
  66.             me^.speed.v := me^.speed.v + 1;
  67.         if me^.speed.v > 30 then
  68.             me^.speed.v := 30;
  69.  
  70.         if me^.kind > 1 then
  71.             me^.kind := me^.kind - 1;
  72.  
  73. {Make sure we are always visible!}
  74.         if me^.position.v < 0 then
  75.             begin
  76.                 me^.position.v := 0;
  77.                 me^.speed.v := 0;
  78.             end;
  79.         if me^.position.h < 0 then
  80.             begin
  81.                 me^.position.h := 0;
  82.                 me^.speed.h := abs(me^.speed.h);
  83.             end;
  84.         if me^.position.v > offSizeV - 32 then
  85.             begin
  86.                 me^.position.v := offSizeV - 32;
  87.                 me^.speed.v := -abs(me^.speed.v) * 2 div 3;
  88.                 me^.kind := 7; {Allow movement for a short while!}
  89.             end;
  90.         if me^.position.h > offSizeH - 32 then
  91.             begin
  92.                 me^.position.h := offSizeH - 32;
  93.                 me^.speed.h := -abs(me^.speed.h);
  94.             end;
  95.  
  96.         me^.mode := abs(me^.mode + 1);
  97.  
  98.         if me^.kind > 1 then
  99.             begin
  100.                 if me^.speed.h > 0 then
  101.                     me^.face := RightFaces[band(me^.mode div 3, 3)];
  102.                 if me^.speed.h < 0 then
  103.                     me^.face := LeftFaces[band(me^.mode div 3, 3)];
  104.             end
  105.         else
  106.             me^.face := FallFace[band(me^.mode, 1)];
  107.  
  108.         me^.layer := -me^.position.v;
  109.     end;
  110.  
  111.     procedure HitPlayerSprite;
  112.     begin
  113. {Hit something! We can take whatever action we need here, but in this case, we let OtherSprite decide.}
  114. {(We could have omitted this function altogether and passed nil.)}
  115.         if him^.kind = 1 then
  116.         else if him^.kind = 2 then
  117.     end;
  118.  
  119. end.